package gob.inei.enaho.view.adapters;

import gob.inei.enaho.model.dao.mapping.TablaVisitaEncuestador;
import gob.inei.enaho.model.domain.persona.Hogar;
import gob.inei.enaho.view.enaho01.Hogar1Fragment;
import gob.inei.enaho2014.R;

import android.content.DialogInterface;
import android.view.View;
import android.widget.Button;
import util.android.AndroidUtil;
import util.android.widgets.GPSView;
import util.android.widgets.StringView;
import util.android.window.OnAceptarCancelarListener;
import util.android.window.ScrollDialog;
import util.form.respuesta.GrupoInput;
import util.patron.command.Command1;

public class IniciaVisitaDialog 
extends ScrollDialog
{

	private final Hogar1Fragment fragmento;
	
	public IniciaVisitaDialog(Hogar1Fragment fragmento) {
		super(fragmento.getActivity());
		
		this.fragmento = fragmento;
		
		setContentView(R.layout.dialog_visita_inicia);
		
		AndroidUtil.ocultarTeclado(this);
		
		show();
	}
	
	public IniciaVisitaDialog inicializar(
			Hogar hogar,
			int nVisita, 			 
			String fecha, 
			String horaInicial, 
			String latitud,
			String longitud,
			final Command1<GrupoInput> onGuardar) {
		try {
			final GrupoInput f = new GrupoInput(null); 
			f.agregar(TablaVisitaEncuestador.CONGLOMERADO, hogar.getVivienda().getConglomerado().getCodigo());
			f.agregar(TablaVisitaEncuestador.VIVIENDA, hogar.getVivienda().getCodigo());
			f.agregar(TablaVisitaEncuestador.HOGAR, hogar.getCodigoString());
			
			StringView sv = (StringView) findViewById(R.id.numero);
			sv.setEtiquetaByStringId(R.string.visita)
			.getInput().setSoloLectura(true)
			.setValor(nVisita+"");
			;				
			f.agregar(TablaVisitaEncuestador.VISITA, sv.getInput());
			
			sv = (StringView) findViewById(R.id.fecha);
			sv.setEtiquetaByStringId(R.string.fecha)
			.getInput().setSoloLectura(true)
			.setValor(fecha)
			;
			//DateUtil.getFechaActualString(DateUtil.dateFormatFecha)		
			f.agregar(TablaVisitaEncuestador.FECHA, sv.getInput());
			
			sv = (StringView) findViewById(R.id.horaIni);
			sv.setEtiquetaByStringId(R.string.horaInicio)				
			.getInput().setSoloLectura(true)
			.setValor(horaInicial)
			;
			//DateUtil.getFechaActualString(DateUtil.dateFormatHora)
			f.agregar(TablaVisitaEncuestador.HORA_INI, sv.getInput());
			
			final GPSView gps = (GPSView) findViewById(R.id.gps);
			gps.setValor(latitud, longitud);
			f.agregar(TablaVisitaEncuestador.LATITUD, TablaVisitaEncuestador.LONGITUD, gps.getInput());
			
			Button b = (Button) findViewById(R.id.btnGuardar);
			b.setOnClickListener(new View.OnClickListener() {					
				@Override
				public void onClick(View v) {				
					try {
						boolean pregunta = gps.getInput().preguntarPorOmisiones(new OnAceptarCancelarListener() {
							
							@Override
							public void onCerrar() throws Exception {
								
							}
							
							@Override
							public void onCancelar() throws Exception {
								
							}
							
							@Override
							public boolean onAceptar() throws Exception {
								guardar(onGuardar,f);
								return true;
							}
						});
						
						if(!pregunta)
							guardar(onGuardar,f);
						
					} catch (Exception e) {
						fragmento.getCuestionarioContext().manejarExcepcion(e);
					}												
				}
			});
			
			setOnDismissListener(new OnDismissListener() {			
				@Override
				public void onDismiss(DialogInterface dialog) {
					//AndroidUtil.mostrarToast(getContext(), "onDismiss");
					try {
						fragmento.actualizarVisitas(true);
					} catch (Exception e) {
						fragmento.getCuestionarioContext().manejarExcepcion(e);
					}
				}
			});
		} catch (Exception e) {
			fragmento.getCuestionarioContext().manejarExcepcion(e);
		}
		
		return this;
	}
	
	
	private void guardar(Command1<GrupoInput> onGuardar, GrupoInput f) throws Exception {
		onGuardar.execute(f);
		cancel();
	}
}
